//COPIAR ESTAS LINEAS DE CODIGO*************************************************************************************
//texto a sustituir cuando no cumple el standar
var textoAnterior = "";
var region = "2", separador = "", decimal = ""; //TENER EN CUENTA QUE REGION ES UN DATO QUE SE TOMARA AL MOMENTO DE CARGAR LA PAGINA
//texto a sustituir cuando no cumple el standar
var cursorInicio, cursorFin, tamanio;
var nav = window.Event ? true : false;

//*********************************************************************************
$(document).ready(function(){
        $("#importe").keyup(function(e){       	     
                var key = nav ? e.which : e.keyCode;	    							       
							       if(key > 64 && key < 91){
							            return false
							       }else{
							       				cursorInicio = $(this).caret().start;
				                cursorFin = $(this).caret().end;
				                
				                if (navigator.appName == "Microsoft Internet Explorer") {
				                       if(e.keyCode == 37 || e.keyCode == 38){
				                                return true;
				                        }
				                        else{
				                        							if(e.keyCode > 64 && e.keyCode < 91){
				                                	        return false;
				                        							}else{
				                        							        evaluaValor($(this))
				                        							}
				                        }
				                }
				                else{
				                        //e.which
				                        if(e.which > 64 && e.which < 91){
				                        	        return false;
				                							}else{
				                							        evaluaValor($(this))
				                							}
				                }
				                
				                $("span.caretStart").text($(this).val().length)
				                $("span.caretEnd").text(cursorFin)
				                $("span.diferencia").text($(this).val().length - cursorFin)
				                
				                if(($(this).val().length - cursorFin) > 1)
				                        $(this).val($(this).val()).caret({start:cursorInicio,end:cursorFin})	
				           }
        });
        
        $("#importe").change(function(e){
                cursorInicio = $(this).caret().start;
                cursorFin = $(this).caret().end;
        
                evaluaValor($(this))
                
                $("span.caretStart").text($(this).val().length)
                $("span.caretEnd").text(cursorFin)
                $("span.diferencia").text($(this).val().length - cursorFin)
                
                if(($(this).val().length - cursorFin) > 1)
                        $(this).val($(this).val()).caret({start:cursorInicio,end:cursorFin})
        });
        
        $("#importe").keypress(function(e){
											  var key = nav ? e.which : e.keyCode;	    							       
							       if(key > 64 && key < 91){
							            return false
							       }else{
							       				cursorInicio = $(this).caret().start;
				                cursorFin = $(this).caret().end;
				                
				                if (navigator.appName == "Microsoft Internet Explorer") {
				                       if(e.keyCode == 37 || e.keyCode == 38){
				                                return true;
				                        }
				                        else{
				                        							if(e.keyCode > 64 && e.keyCode < 91){
				                                	        return false;
				                        							}else{
				                        							        evaluaValor($(this))
				                        							}
				                        }
				                }
				                else{
				                        //e.which
				                        if(e.which > 64 && e.which < 91){
				                        	        return false;
				                							}else{
				                							        evaluaValor($(this))
				                							}
				                }
				                
				                $("span.caretStart").text($(this).val().length)
				                $("span.caretEnd").text(cursorFin)
				                $("span.diferencia").text($(this).val().length - cursorFin)
				                
				                if(($(this).val().length - cursorFin) > 1)
				                        $(this).val($(this).val()).caret({start:cursorInicio,end:cursorFin})	
							       }	        	
        });
});

//REFERENTE A LA REGION**********************************************
if(region == "1"){
        separador = ",";
        decimal = ".";
}//else{

if(region == "2"){
        separador = ".";
        decimal = ",";
}

//Funcion que establece si el valor es valido o no*******************
function cumpleStandar(valor){
        //Se establece la expresion regular de importe
        var expresion = new RegExp("^(|([0-9]{1,50}(\\"+ decimal +"([0-9]{1,2})?)?))$");
        
        //se valida el valor recibido con la expresion regular de importe
        if(expresion.test(valor))
                return true;
                
        return false;
 }

//Funcion que obtine el valor y lo envia a validacion******************
function evaluaValor(campo){
        var valor, decimales, band = 0, fraccion, enteros;

        //si comienza con una coma, se agrega un cero
        if(campo.val().substring(0,1) == decimal){ 
                campo.val("0" + campo.val());
        }else{
                if(campo.val().indexOf(decimal) < 0){
                        separadorMiles(campo)
                }
                else{
                        separadorMiles(campo)
                
                        if(decimal == ","){
                                //Registrar cuantas veces se encuentra el separador decimal en la cadena
                                var contar = 0;
                                var matches = campo.val().match(/\,/g);
                                if (matches) 
                                        contar = matches.length;
                                //-----------------------------------------------------------------------
                                //Si se encuentra mas de una vez borrar de lo contrario separar----------
                                if(contar <= 1){
                                        valor = campo.val().toString().split(",");
                                }else{
                                        campo.val(campo.val().replace(/^\,|\,$/g,""));
                                        
                                        valor = campo.val().toString().split(",");
                                }
                                //------------------------------------------------------------------------
                        }//else 
                        
                        if(decimal == "."){
                                //Registrar cuantas veces se encuentra el separador decimal en la cadena
                                var contar = 0;
                                var matches = campo.val().match(/\./g);
                                if (matches) {
                                        contar = matches.length;
                                }
                                
                                //-----------------------------------------------------------------------
                                //Si se encuentra mas de una vez borrar de lo contrario separar----------
                                if(contar <= 1){
                                        valor = campo.val().toString().split(".");
                                }else{
                                        campo.val(campo.val().replace(/^\.|\.$/g,""));
                                        
                                        valor = campo.val().toString().split(".");
                                }
                                //------------------------------------------------------------------------
                        }
                        
                        //Una vez separado--------------------------------------------------------
                        if(campo.val().indexOf(decimal) > 0){
                                decimales = 0 + decimal + valor[1];
                                
                                if(!cumpleStandar(decimales)){
                                        decimales = textoAnterior;
                                        
                                        fraccion = decimales.toString().split(decimal)
                                        
                                        campo.val(valor[0] + decimal + fraccion[1]);
                                        
                                        separadorMiles(campo);
                                        
                                }else{ //todo en orden
                                        textoAnterior = decimales;//La funcion original llega hasta aqui
                                }
                        }
                        //-------------------------------------------------------------------------
                }
        }
}

//**************************************************************************************
function separadorMiles(componente){
        //alert(decimal)

        if(componente.val().indexOf(decimal) > 0){
                //alert("con decimal")
        
                var componentes = componente.val().toString().split(decimal);
                
                if(region == "1"){                      
                        //----------------------------------VALIDACION DE Y CONSTRUCCION DE MILES
                        //Separacion y validacion para la primer parte del arreglo (MILES)      
                        var num = componentes[0].replace(/\,/g,"");
                
                        //alert("Este es el numero: " + num)
                
                        if(!isNaN(num)){
                                //Validacion y separacion 
                                num = num.toString().split("").reverse().join("").replace(/(?=\d*\,?)(\d{3})/g,"$1,");//Colocando separeadores de miles

                                num = num.split("").reverse().join("").replace(/^[\,]/,"");//reemplazando puntos que se encuentren al final o principio de la linea

                                
                                //Estableciendo valor que se colocara en el campo de texto
                                componente.val(num + decimal + componentes[1]);
                        }
                        else{
                                //En caso de introducir otro valor que no sea un numero se toma el valor y se eliminan los caracteres que no sean numeros o puntos
                                nom = componentes[0].replace(/[^\d\,]*/g,"")                                            
                                
                                componente.val(nom + decimal + componentes[1]);
                        }
                        //-------------------------------------------------------------------------------
                }
                
                if(region == "2"){                      
                        //------------------------------------------VALIDACION DE Y CONSTRUCCION DE MILES
                        //Separacion y validacion para la primer parte del arreglo (MILES)      
                        var num = componentes[0].replace(/\./g,"");
                
                        if(!isNaN(num)){
                                //Validacion y separacion 
                                num = num.toString().split("").reverse().join("").replace(/(?=\d*\.?)(\d{3})/g,"$1.");//Colocando separeadores de miles

                                num = num.split("").reverse().join("").replace(/^[\.]/,"");//reemplazando puntos que se encuentren al final o principio de la linea

                                
                                //Estableciendo valor que se colocara en el campo de texto
                                componente.val(num + decimal + componentes[1]);
                        } 
                        else{
                                //En caso de introducir otro valor que no sea un numero se toma el valor y se eliminan los caracteres que no sean numeros o puntos
                                nom = componentes[0].replace(/[^\d\.]*/g,"")            
                                
                                componente.val(nom + decimal + componentes[1]);
                        }
                        //---------------------------------------------------------------------------------
                }                       
        }                       
                
        else{
                //alert("sin decimal")
        
                if(region == "1"){                      
                        //-------------------------------------------VALIDACION DE Y CONSTRUCCION DE MILES
                        //Separacion y validacion para la primer parte del arreglo (MILES)      
                        var num = componente.val().replace(/\,/g,"");
                
                        //alert("Este es el numero: " + num)
                
                        if(!isNaN(num)){
                                //Validacion y separacion 
                                num = num.toString().split("").reverse().join("").replace(/(?=\d*\,?)(\d{3})/g,"$1,");//Colocando separeadores de miles

                                num = num.split("").reverse().join("").replace(/^[\,]/,"");//reemplazando puntos que se encuentren al final o principio de la linea

                                
                                //Estableciendo valor que se colocara en el campo de texto
                                componente.val(num);
                        }
                        else{
                                //En caso de introducir otro valor que no sea un numero se toma el valor y se eliminan los caracteres que no sean numeros o puntos
                                componente.val(componente.val().replace(/[^\d\,]*/g,""));
                        }
                        //-------------------------------------------------------------------------------------
                }
                
                if(region == "2"){                      
                        //------------------------------------------------VALIDACION DE Y CONSTRUCCION DE MILES
                        //Separacion y validacion para la primer parte del arreglo (MILES)      
                        var num = componente.val().replace(/\./g,"");
                
                        if(!isNaN(num)){
                                //Validacion y separacion 
                                num = num.toString().split("").reverse().join("").replace(/(?=\d*\.?)(\d{3})/g,"$1.");//Colocando separeadores de miles

                                num = num.split("").reverse().join("").replace(/^[\.]/,"");//reemplazando puntos que se encuentren al final o principio de la linea
                                
                                //Estableciendo valor que se colocara en el campo de texto
                                componente.val(num);
                        }
                        else{
                                //En caso de introducir otro valor que no sea un numero se toma el valor y se eliminan los caracteres que no sean numeros o puntos
                                componente.val(componente.val().replace(/[^\d\.]*/g,""));
                        }
                        //---------------------------------------------------------------------------------------
                }                       
        }//fin else
}
//TERMINA COPIAR LINEAS DE CODIGO**********************************************************************
